var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var ejs = require('ejs');
const { tokenVerification } = require('./middleware/index.js');

var indexRouter = require('./routes/index');

var app = express();
app.all('*', function(req, res, next) {
	res.header('Access-Control-Allow-Origin', '*'); //跨域问题
	res.header('Access-Control-Allow-Headers', 'Content-Type,token');
	res.header('Content-Type', 'application/json;charset=utf-8');
	next();
});
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// app.engine('html', ejs.__express);
// app.set('view engine', 'html');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// app.use('/', indexRouter);
app.use('/', (req, res, next) => {
	if (req.headers.type === 'web') {
		next();
	} else {
		if (req.url.indexOf('login') > -1 || req.url.indexOf('/static') > -1) {
			next();
		} else {
			tokenVerification(req.headers.token)
				.then(result => {
					next();
				})
				.catch(err => {
					let obj = {
						code: 401,
						data: null,
						msg: 'token失效'
					};
					res.json(obj);
				});
		}
	}
});
app.use('/login', indexRouter.login);
app.use('/admin', indexRouter.admin);
app.use('/user', indexRouter.user);
app.use('/article', indexRouter.article);
app.use('/column', indexRouter.column);
app.use('/tab', indexRouter.tab);
app.use('/comment', indexRouter.comment);
app.use('/upload', indexRouter.upload);
app.use('/static', indexRouter.static);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
	next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
	// set locals, only providing error in development
	res.locals.message = err.message;
	res.locals.error = req.app.get('env') === 'development' ? err : {};

	// render the error page
	res.status(err.status || 500);
	res.render('error');
});

module.exports = app;
